#!/usr/bin/env python
# -*- coding:utf-8 -*-

# file:homework8_3_compare1.py
# author:wmf
# datetime:2021/5/8 21:57
# software: PyCharm
'''
this is function description
'''
# import module your need

# 3  多进程练习：
# 计算1～100000之间所有素数的个数， 要求如下:
# - 编写函数判断一个数字是否为素数，然后统计素数的个数；
# -对比1: 对比使用多进程和不使用多进程两种方法的统计速度。
# -对比2：对比开启4个多进程和开启10个多进程两种方法的速度。
import math
import time
from multiprocessing import Pool


def if_prime(n):
    if n == 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def get_time(func):
    def inner(n):
        start_time = time.time()
        func(n)
        end_time = time.time()
        print("不使用进程的运行时间为:%s" % (end_time - start_time))

    return inner


@get_time
def getPrimeNum1(n):
    count = 0
    for x in range(n, n+100000):
        if if_prime(x):
            count += 1
    return count


def getPrimeNum2(n):
    count = 0
    for x in range(n, n+25000):
        if if_prime(x):
            count += 1
    return count


if __name__ == "__main__":
    getPrimeNum1(1)
    p = Pool(4)
    start_time = time.time()
    for i in range(4):
        i = 1+i*25000
        p.apply_async(getPrimeNum2, (i,))
    p.close()
    p.join()
    end_time = time.time()
    print("使用进程的运行时间为:%s" % (end_time-start_time))